﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace Modelo.Seguridad
{
    public class CatalogoPermisos
    {

        public List<Entidades.Seguridad.Permiso> ColPermisos;

        public CatalogoPermisos()
        {
            ColPermisos = Mapping.Seguridad.MappingPermisos.ConsultarPermisos();
        }

        public ReadOnlyCollection<Entidades.Seguridad.Permiso> ListarPermisos()
        {
            return  ColPermisos.AsReadOnly();
        }

        public ReadOnlyCollection<Entidades.Seguridad.Permiso> ListarPermisos(string permiso)
        {
            var query = from perm in ColPermisos
                        where (perm.Nombre.ToLower().Contains(permiso.ToLower()))
                        select perm;

            return query.ToList().AsReadOnly();
        }


        public Entidades.Seguridad.Permiso BuscarPermiso(string idPerm)
        {
            return this.ColPermisos.Find(oPerm => oPerm.IdPermiso == idPerm);
        }

        public bool AgregarPermiso(Entidades.Seguridad.Permiso oPermiso)
        {
            ColPermisos.Add(oPermiso);
            return Mapping.Seguridad.MappingPermisos.AgregarPermiso(oPermiso);
        }

        public bool EliminarPermiso(Entidades.Seguridad.Permiso opermiso)
        {
            Entidades.Seguridad.Permiso oPermiso = BuscarPermiso(opermiso.IdPermiso);
            ColPermisos.Remove(oPermiso);
            return Mapping.Seguridad.MappingPermisos.EliminarPermiso(oPermiso);
        }
        public bool ModificarPermiso(Entidades.Seguridad.Permiso opermiso)
        {
            Entidades.Seguridad.Permiso oPermiso = BuscarPermiso(opermiso.IdPermiso);

            ColPermisos.Remove(oPermiso);
            ColPermisos.Add(opermiso);
            Mapping.Seguridad.MappingPermisos.ModificarPermiso(opermiso);
            return true;
        }

        public bool ValidarExistencia(Entidades.Seguridad.Permiso oPermiso)
        {
            if (this.ColPermisos.Count(oForm => oForm.Nombre == oPermiso.Nombre) == 0)
            {
                return true;
            }
            
            
            return false;
        }

        public Int32 GetMayor()
        {
            String maxIdPermiso =
                (from prod in ColPermisos
                 select prod.IdPermiso)
                .Max();

            return Convert.ToInt32(maxIdPermiso);
        }
    }
}
